/**
 * 只出现一次的数字
给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。

说明：

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

 */

// 1.先排序，2.奇数位置与奇数+1位置元素不同，则证明奇数之前存在只出现一次的数字3.如果没有不相同的元素，则证明为最后一个元素
var singleNumber_one = function(nums) {
  nums.sort((a, b) => a - b)
  console.log(nums)
  for(let i = 0; i < nums.length - 1; i++) {
    // console.log(nums[i], nums[++i])
    if(nums[i] !== nums[++i]) {
        return nums[--i]
    }
  }
}

// 利用异或，（1.任何数和自己做异或，运算结果为0,a^a=0;2.任何书和0做异或运算，结果还是自己,a^0=0;3.异或运算中，满数据交换律和结合律，a^b^a=b^a^a=b^0=b）
var singleNumber_two = function(nums) {
    let res = 0;
    for(let i in nums) {
        res = res ^ nums[i] 
    }
    return res
}

console.log(singleNumber_two([4,1,2,1,2, 5,5]))

